from django.db import models

class Menu(models.Model):
    """
    menu model
    一级菜单不需要展示，所以也不需要url
    """
    title = models.CharField(max_length=32, verbose_name='一级菜单标题')
    icon = models.CharField(verbose_name='图标', max_length=32)

    def __str__(self):
        return self.title

# Create your models here.
class Permission(models.Model):
    '''
    权限表
    '''
    title = models.CharField(max_length=32, verbose_name='标题')
    url = models.CharField(max_length=128, verbose_name='含正则的URL')
    #url别名可做为permission_dict的key,然后方便进行查询
    name=models.CharField(verbose_name='URL别名',max_length=32,unique=True)
    menu=models.ForeignKey('Menu',null=True,blank=True,verbose_name='所属菜单',
                           help_text='null表示不是菜单，非nul表示 是二级菜单',on_delete=models.DO_NOTHING)
    # is_menu = models.BooleanField(default=False, verbose_name='是否是菜单')
    #null 表示数据库里面可以为空，blank 表示 django admin 操作中可以为空
    # icon = models.CharField(verbose_name='图标', max_length=32, blank=True, null=True)
    #自关联
    pid=models.ForeignKey('self',blank=True,null=True,on_delete=models.DO_NOTHING,verbose_name='关联的权限',
                          help_text='对于非菜单权限要选择一个可以成为菜单的权限，对于菜单权限是不需要有pid的',
                          related_name='parents')

    def __str__(self):
        return self.title


class Role(models.Model):
    '''
    角色表
    '''
    title = models.CharField(max_length=32, verbose_name='角色名称')
    permissions = models.ManyToManyField(verbose_name='角色权限', to='Permission', blank=True)

    def __str__(self):
        return self.title


class UserInfo(models.Model):
    '''
    用户表
    '''
    name = models.CharField(max_length=32, verbose_name='用户名')
    password = models.CharField(max_length=256, verbose_name='密码')
    email = models.EmailField(verbose_name='邮箱', max_length=32)
    roles = models.ManyToManyField(verbose_name='角色', to=Role, blank=True)

    def __str__(self):
        return self.name

    class Meta:
        abstract = True
